#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

#include <list>
#include <deque>
#include <string>
#include <vector>


using namespace std;
namespace jlf
{

    template<class T, class Con = deque<T>>
    class stack
    {
    public:
        stack()
        {
        }

        void push(const T& x)
        {
            _con.push_back(x);
        }

        void pop()
        {
            _con.pop_back();
        }

        T& top()
        {
            return _con.back();
        }

        const T& top() const
        {
            return _con.back();
        }

        size_t size() const
        {
            return _con.size();
        }

        bool empty() const
        {
            return _con.empty();
        }

    private:
        Con _con;
    };


    template<class T, class Con = deque<T>>
    class queue
    {
    public:
        queue()
        {
        }

        void push(const T& x)
        {
            _con.push_back(x);

        }

        void pop()
        {
            _con.pop_front();
        }

        T& back()
        {
            return _con.back();
        }

        const T& back() const
        {
            return _con.back();

        }

        T& front()
        {
            return _con.front();
        }

        const T& front()const
        {
            return _con.front();

        }

        size_t size() const
        {
            return _con.size();
        }

        bool empty() const
        {
            return _con.empty();

        }

    private:

        Con _con;

    };

};
int main()
{
    jlf::stack<int,vector<int>> st;
    st.push(1);
    st.push(2);
    st.push(3);
    st.push(4);
    st.push(5);
    cout << st.size() << endl;

    while (!st.empty())
    {
        cout << st.top() << " ";
        st.pop();
    }
    cout << endl;


    jlf::queue<string,deque<string>> q;
    q.push("111");
    q.push("222");
    q.push("333");
    q.push("qqq");
    q.push("ppp");
    cout << q.size() << endl;
    while (!q.empty())
    {
        cout << q.front() << " ";
        q.pop();
    }
    cout << endl;


    return 0;
}